package com.gym.openapi.web.controller;

import com.gym.openapi.common.ResponseResult;
import com.gym.openapi.common.ResultTable;
import com.gym.openapi.entity.Menu;
import com.gym.openapi.entity.Role;
import com.gym.openapi.services.MenuServices;
import com.gym.openapi.services.RoleServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author ming
 * 2021/11/24
 * description:
 * @RestController//类中所有方法返回json
 * @RequestMapping来映射请求，也就是通过它来指定控制器可以处理哪些URL请求，相当于Servlet中在web.xml中配置
 */
@RestController
@RequestMapping("/role")
public class RoleController {

    @Autowired
    private RoleServices roleServices;
    @Autowired
    private MenuServices menuServices;

    /**
     *@author:ming
     *@Date: 2021/11/24
     *@description:分页数据和搜索栏搜索
     * @RequestParam是传递参数的.避免翻页时为负数
     * defaultValue默认数值，前端不设置的情况下
     */
    @RequestMapping("/getRole")
    public ResultTable getRolePageWithName(@RequestParam(defaultValue = "1") Integer page,
                                           @RequestParam(defaultValue = "10") Integer limit,
                                           String name) {
        ResultTable rt = roleServices.getRolePageWithName(page, limit, name);
        return rt;
    }
    /**
     *@author:ming
     *@Date: 2021/11/24
     *@description:通过角色id查找菜单树的数据
     */
    @RequestMapping("/role_menu")
    public List<Integer> getRoleMenu(Integer roleId) {
        return roleServices.getRoleMenu(roleId);
    }

    /**
     *@author:ming
     *@Date: 2021/11/25
     *@description:有效无效状态修改
     * 修改授权菜单树的选项状态
     * 菜单树中先删除所有的数据，再添加修改后的
     */
    @RequestMapping("/updateStatus")
    public ResponseResult updateStatus(Integer id, Integer status) {
        return roleServices.updateStatus(id, status);
    }
    /**
     *@author:ming
     *@Date: 2021/11/25
     *@description:添加数据
     */
    @RequestMapping("/add")
    public ResponseResult add(Role r) {
        return roleServices.add(r);
    }

    /**
     *@author:ming
     *@Date: 2021/11/25
     *@description:修改授权菜单树的选项状态
     *菜单树中先删除所有的数据，再添加修改后的
     */
    @RequestMapping("/update")
    public ResponseResult update(Role r) {
        return roleServices.updateRole(r);
    }
    /**
     *@author:ming
     *@Date: 2021/11/25
     *@description:显示授权菜单树，勾选已经拥有的菜单
     */
    @RequestMapping("/menu_tree")
    public List<Menu> getMenuTree() {
        return menuServices.getAllTree();
    }

    /**
     *@author:ming
     *@Date: 2021/11/25
     *@description:授权操作，批量处理菜单树中先删除所有的数据，再添加修改后的
     */
    @RequestMapping("/assign_menu")
    public ResponseResult assignMenu(Integer roleId, Integer[] menuIds) {
        try {
            return roleServices.assignMenu(roleId, menuIds);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseResult.getFail("授权操作失败");
    }

}
